home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_315 / surf / bezpt.h < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  72 lines

  1. #include "fasttrig.h"
  2. /*
  3.  * structures and such for manipulating bezier curves
  4.  */
  5.  
  6. #define MaxSegs  50  /* max number of bezier segments */
  7.  
  8. typedef struct {
  9.     int prev2;  /* second control point of segment n-1 */
  10.     int cur0;   /* begin of segment n, end of segment n-1 */
  11.     int cur1;   /* first control point of segment n */
  12. } BezVal;
  13.  
  14.  
  15. typedef struct {
  16.     BezVal  x, y;
  17. } BezCoord;
  18.  
  19. #define DefBezMeshVal 10
  20.  
  21. extern BezCoord Bezpt[MaxSegs+1];
  22. extern void SetBezMesh( /* Panel_item, int, struct input_event */);
  23. extern int BezMesh;
  24. extern float BezStepSize;
  25.  
  26. extern void InitCalcBez( /* void */ );
  27. extern void CalcBezPt(/* float, float *, float * */);
  28. extern void XdrawAllBezSegs(/* void */);
  29. extern void XdrawBezSeg(/* void */);
  30. extern void InitBezPt( /* int, int */);
  31. extern void EditBezPt( /* int, int */);
  32. extern void ResetCurve( /* void */ );
  33.  
  34. extern int NumBezPts;
  35. extern int ActSeg;
  36. #define BezRings() (GetNumSegs() * BezMesh + 1)
  37. #define GetFirstSeg()   (0)
  38. #define GetNumSegs()    (NumBezPts-1)
  39. #define ResetActSeg()   { ActSeg = GetFirstSeg(); }
  40. #define GetCurSeg()     (ActSeg)
  41. #define PrevSegNo()   (ActSeg -1 < 0 ? GetNumSegs(): ActSeg -1 )
  42. #define PrevSeg()   { ActSeg = PrevSegNo(); }
  43. #define NextSegNo() ((ActSeg+1) % GetNumSegs())
  44. #define NextSeg()       { ActSeg = NextSegNo(); }
  45.  
  46. enum BezPtEnum { BPEStartPt, BPEEndPt, BPECntrlPt1, BPECntrlPt2 };
  47.  
  48. #define StartPtX(XSegNo) Bezpt[XSegNo].x.cur0
  49. #define StartPtY(XSegNo) Bezpt[XSegNo].y.cur0
  50.  
  51. #define Cntrl1X(XSegNo) Bezpt[XSegNo].x.cur1
  52. #define Cntrl1Y(XSegNo) Bezpt[XSegNo].y.cur1
  53.  
  54. #define Cntrl2X(XSegNo) Bezpt[XSegNo+1].x.prev2
  55. #define Cntrl2Y(XSegNo) Bezpt[XSegNo+1].y.prev2
  56.  
  57. #define EndPtX(XSegNo) Bezpt[XSegNo+1].x.cur0
  58. #define EndPtY(XSegNo) Bezpt[XSegNo+1].y.cur0
  59.  
  60. #define DrawStartPt() DrawBox( Bezpt[ActSeg].x.cur0, \
  61.                                Bezpt[ActSeg].y.cur0, XOR )
  62.  
  63. #define DrawEndPt() DrawBox( Bezpt[ActSeg+1].x.cur0, \
  64.                                Bezpt[ActSeg+1].y.cur0, XOR )
  65.  
  66. #define DrawControl0() DrawSqr( Bezpt[ActSeg].x.cur1,\
  67.                                 Bezpt[ActSeg].y.cur1, XOR )
  68.  
  69. #define DrawControl1() DrawSqr( Bezpt[ActSeg+1].x.prev2,\
  70.                                 Bezpt[ActSeg+1].y.prev2, XOR )
  71.  
  72.